package cn.lg.soar.boot.fc.service;

import cn.lg.soar.boot.fc.entity.bo.FloorBo;
import cn.lg.soar.boot.fc.entity.vo.FloorEasyVo;
import cn.lg.soar.boot.fc.entity.vo.FloorVo;
import cn.lg.soar.boot.fc.params.RoomParams;
import cn.lg.soar.common.model.HttpResult;
import cn.lg.soar.common.model.PageQuery;
import cn.lg.soar.common.model.PageResult;
import cn.lg.soar.database.base.service.IBaseService;
import cn.lg.soar.boot.fc.entity.Floor;
import cn.lg.soar.database.query.QueryParams;
import com.alibaba.fastjson.JSONObject;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * 楼层表
 * @author ZhuanZ（无密码）
 * @since 2025-01-10
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
public interface FloorService extends IBaseService<Floor> {

    /**
     * 创建
     * @param floorBo
     * @return
     */
    HttpResult<Serializable> create (FloorBo floorBo);

    /**
     * 更新
     * @param floorBo
     * @return
     */
    HttpResult<Void> update (FloorBo floorBo);

    /**
     * 通过id获取数据
     * @param id
     * @return
     */
    Floor getData (Long id);

    /**
     * 获取vo 数据
     * @param id
     * @return
     */
    FloorVo getVoData (Long id);

    /**
     * 获取简单的vo数据
     * @param id
     * @return
     */
    FloorEasyVo getEasyVoData (Long id);

    /**
     * 获取分页vo数据
     * @param pageQuery
     * @param params
     * @return
     */
    PageResult<FloorVo> queryResultVo (PageQuery pageQuery, QueryParams params);

    /**
     * 提供给地图页面，通过  1-3-0-0 结构key获取楼层与 房间的信息
     * @param pageQuery
     * @param params
     * @param roomParams
     * @return
     */
    PageResult<JSONObject> queryResultEasyVo (PageQuery pageQuery, QueryParams params, RoomParams roomParams);

    /**
     * 检索关联，通过 校区id、楼栋id、单元id 查询对应的楼层信息
     * @param params
     * @return
     */
    List<FloorVo> getListVoByOtherId (QueryParams params);

    List<Floor> getListByOtherId (QueryParams params);

    Floor getByOtherIdAndName (Long campusId, Long buildingId , Long unitId, String name);

    /**
     * 导出表格
     * @param filename
     * @param params
     * @param resp
     */
    void exportExcel (String filename, QueryParams params, HttpServletResponse resp);

    /**
     * 导入房间信息
     * @param files
     * @return
     */
    HttpResult<Void> importExcel (MultipartFile files);

    /**
     * 拖拽排序
     */
    HttpResult<Serializable> updateSort(List<Map<String, Integer>> sortedData);

}
